package com.swcw.platform.utils;

import java.security.MessageDigest;
import java.util.UUID;

public class MD5Util {

	private static String byteArrayToHexString(byte b[]) {
		StringBuffer resultSb = new StringBuffer();
		for (int i = 0; i < b.length; i++)
			resultSb.append(byteToHexString(b[i]));

		return resultSb.toString();
	}

	private static String byteToHexString(byte b) {
		int n = b;
		if (n < 0)
			n += 256;
		int d1 = n / 16;
		int d2 = n % 16;
		return hexDigits[d1] + hexDigits[d2];
	}

	public static String MD5RandomEncode(String origin, String charsetname) {
		String resultString = null;
		try {
			resultString = new String(UUID.randomUUID().toString() + origin);
			MessageDigest md = MessageDigest.getInstance("MD5");
			if (charsetname == null || "".equals(charsetname))
				resultString = byteArrayToHexString(md.digest(resultString.getBytes()));
			else
				resultString = byteArrayToHexString(md.digest(resultString.getBytes(charsetname)));
		} catch (Exception exception) {
		}
		return resultString;
	}

	public static String MD5Encode(String origin, String charsetname) {
		String resultString = null;
		try {
			resultString = new String(origin);
			MessageDigest md = MessageDigest.getInstance("MD5");
			if (charsetname == null || "".equals(charsetname))
				resultString = byteArrayToHexString(md.digest(resultString.getBytes()));
			else
				resultString = byteArrayToHexString(md.digest(resultString.getBytes(charsetname)));
		} catch (Exception exception) {
		}
		return resultString;
	}

	private static final String hexDigits[] = { "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "a", "b", "c", "d",
			"e", "f" };
	
	  public static String encode(String password, String algorithm)
	  {
	    byte[] unencodedPassword = password.getBytes();
	    MessageDigest md = null;
	    try
	    {
	      md = MessageDigest.getInstance(algorithm);
	    }
	    catch (Exception e)
	    {
	      return password;
	    }
	    md.reset();
	    md.update(unencodedPassword);
	    byte[] encodedPassword = md.digest();
	    StringBuffer buf = new StringBuffer();
	    for (int i = 0; i < encodedPassword.length; i++)
	    {
	      if ((encodedPassword[i] & 0xFF) < 16)
	      {
	        buf.append("0");
	      }
	      buf.append(Long.toString(encodedPassword[i] & 0xFF, 16));
	    }
	    return buf.toString();
	  }

}
